#设置此项目所需的最低CMake版本。
cmake_minimum_required(VERSION 3.22.1)

#include_directories:指定 原生代码 或 so库 的头文件路径
#添加头文件路径（相对于本文件路径）
include_directories(include)

#声明项目名称。
project("ffmpeg_simple01")

#find_library：将一个变量和Android NDK的某个库建立关联关系。该函数的第二个参数为Android NDK中对应的库名称，
#而调用该方法之后，它就被和第一个参数所指定的变量关联在一起。 在这种关联建立以后，我们就可以使用这个变量在构建脚本的其它部分引用该变量所关联的NDK库。
find_library(
        log-lib
        log)

#CMAKE_SOURCE_DIR 表示的是CMakeLists.txt所在的路径
#message("============================= 1 =============================")
#message("${CMAKE_CXX_FLAGS}")
#message("============================= 2 =============================")
#message("${CMAKE_SOURCE_DIR}")
#message("============================= 3 =============================")
#message("${ANDROID_ABI}")
#message("${CMAKE_HOME_DIRECTORY}/libs/${ANDROID_ABI}")
#设置环境变量         结合include_directories(include)，最后在target_link_libraries中添加静态库或动态库的名字，就可以实现引入第三方静态库或动态库
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")

#查找在某个路径下的所有源文件(暂时不做演示)
#使用aux_source_directory方法将路径列表全部放到一个变量中。不会递归包含子目录，仅包含指定的dir目录

#add_library:添加 源文件或库
#创建可执行文件或库的目标
#第一个参数，决定了最终生成的共享库的名字
#第二个参数，我们可以指定根据源文件编译出来的是静态库还是共享库，分别对应STATIC/SHARED关键字
#第三个参数，指定源文件   （为IMPORTED时则表示是外部预编译的）

#创建并命名一个库（构建一个原生库）
#在 Android 中调用 System.loadLibrary("ffmpeg_simple01") 时，库名称 必须 与 CMakeLists.txt 中定义的目标库名称 完全匹配。即add_library中的第一个参数不能随便定义
#在这个顶级CMakeLists.txt中，${CMAKE_PROJECT_NAME}用于定义目标库名称；
add_library(${CMAKE_PROJECT_NAME} SHARED native-lib.cpp)

#将预构建库关联到原生库
#指定CMake应链接到目标库的库。可以链接来自不同来源的库，例如本文中定义的库构建脚本、预构建的第三方库或Android系统库。
target_link_libraries(${CMAKE_PROJECT_NAME}
        avcodec
        avformat
        avfilter
        avutil
        swresample
        swscale
        android
        OpenSLES
        GLESv2
        EGL
        ${log-lib})